package CapaDatos.listas;

import CapaDatos.Reservacion;
import CapaLogica.Operaciones;
import java.util.List;
import java.util.TreeSet;
import java.util.Comparator;
import java.util.Iterator;
import java.util.NoSuchElementException;

public class ListaReservaciones
{
    private TreeSet <Reservacion> lista;
    private Comparator comparator;

    public ListaReservaciones()
    {
        comparator = new CompararReservaciones();
        lista = new TreeSet(comparator);
    }

    public ListaReservaciones(List list)
    {
        comparator = new CompararReservaciones();
        lista = new TreeSet(comparator);
        lista.addAll(list);
    }

    public String agregar (Reservacion reservacion) {
        String ID = obtenerProximoID();
        reservacion.setID (ID);

        if (lista.add(reservacion))
            return "TRUE:" + ID.toString() + ":" + reservacion.getCliente().getCedula();
        else
            return "FALSE";
    }

    public void agregar (List reservaciones) {
        lista.addAll(reservaciones);
    }

    public boolean actualizar (Reservacion reservacion) {
        if (!eliminar(reservacion.getID()))
            return false;

        if (agregar(reservacion).equals("FALSE"))
            return false;

        return true;
    }

    public boolean eliminar (String ID) {
        Reservacion auxiliar = buscar (ID);

        if (auxiliar == null)
            return false;

        if (!lista.remove(auxiliar))
            return false;

        String idCliente = auxiliar.getCliente().getCedula();

        return Operaciones.cancelarReservacion(ID, idCliente);
    }

    public Reservacion buscar (String ID) {
        Reservacion auxiliar = null;
        Iterator iterator = lista.iterator();

        while (iterator.hasNext())
        {
            auxiliar = (Reservacion) iterator.next();

            if (auxiliar.getID().equals(ID))
                return auxiliar;
        }

        return null;
    }

    public Reservacion[] array() {
        return lista.toArray(new Reservacion[0]);
    }

    public int cantidad() {
        return lista.size();
    }

    public String obtenerProximoID () {
        Reservacion reserva;

        try
        {
            reserva = lista.last();
        }
        catch (NoSuchElementException e)
        {
            return "1";
        }

        Integer ID = Integer.valueOf(reserva.getID());
        ID ++;
        return ID.toString();
    }
}